Архитектура хранения¶
Tarantool Column Store – колоночная транзакционно-аналитическая СУБД, построенная на платформе Tarantool Enterprise Edition. TCS наследует от Tarantool базовые возможности хранения и масштабирования:
данные хранятся в оперативной памяти;
хранение персистентно;
доступен механизм репликации.
TCS относится к гибридному классу систем хранения HTAP (Hybrid transactional/analytical processing). Хранилище данных реализовано средствами in-memory СУБД Tarantool. Для работы с данными в колоночном формате используется движок обработки данных MemCS. Такая архитектура позволяет добиться оптимальной производительности аналитических запросов (OLAP) наряду с характерной для Tarantool высокой производительностью при транзакционной нагрузке (OLTP).
Ниже описаны детали реализации основных механизмов TCS:
Колоночное хранение¶
Основное хранилище данных TCS работает с данными в колоночном формате.
Ключевое отличие колоночных СУБД от реляционных СУБД с табличным хранением – использование колонки в качестве единицы хранения вместо таблицы. В реляционной СУБД все поля одного объекта хранятся рядом в виде одной строки таблицы. В свою очередь, в колоночной рядом располагаются все значения одного поля таблицы, а поля одного объекта разнесены по соответствующим колонкам и не хранятся вместе.
Использование колоночного формата позволяет оптимизировать работу TCS под нагрузкой, характерной для аналитических задач (OLAP), то есть при большом количестве запросов на чтение и вычисление агрегатов.
Чтение данных¶
Как гибридное решение, TCS предполагает работу под транзакционной нагрузкой на запись. Для консистентности чтения данных в таких условиях TCS использует представления для чтения (read view) – снимки хранилища данных в конкретный момент времени.
В каждый момент времени в TCS существует одно актуальное представление на чтение.
Оно обновляется раз в rv_update_ms миллисекунд. Когда приходит запрос
на чтение данных, для него используется актуальное представление.
Чтение выполняется в многопоточном режиме. Каждый поток, выполняющий запрос на чтение,
использует свое представление. В системе хранится набор всех используемых в данный момент
представлений, то есть тех, из которых еще выполняется чтение в рамках выполнения запросов.
Когда обработка запроса завершена, и при этом уже создано более актуальное представление,
то представление, которые использовалось для этого запроса, помещается в очередь
на удаление. Представления из этой очереди удаляются при следующей итерации цикла
сборщика мусора (раз в rv_update_ms миллисекунд).
Подробнее о представлениях на чтение см. документацию Tarantool EE.
Вытеснение данных¶
Удаление данных из TCS выполняется автоматически по мере заполнения хранилища. Такой механизм также известен как вытеснение. При добавлении новых записей сверх лимита одновременно хранимых записей наиболее старые записи удаляются.
В TCS вытеснение организовано потаблично: для каждой таблицы может быть определен свой лимит количества одновременно хранимых записей.
Лимит задается с помощью параметра MAX_ROWS и указания максимального количества записей в таблице:
при создании таблицы, например:
CREATE TABLE t MAX_ROWS 10000при изменении таблицы, например:
ALTER TABLE t MAX_ROWS 100000
В результате, самые старые записи, которые выходят за указанный лимит, будут удалены из таблицы.
По умолчанию, лимит для таблиц не установлен: без явного указания лимита MAX_ROWS при создании таблицы вытеснение данных из нее не производится.
При необходимости можно в дальнейшем отключить вытеснение, задав значение лимита равное 0, например:
ALTER TABLE t MAX_ROWS 0.
Вытеснение записей из таблиц производится только перед операциями вставки, чтобы не превысить установленный лимит.